package com.test.jdk.funtion;

import java.util.function.Function;

public class FunctionDemo {
    public static void main(String[] args) {

        //R apply(T t); 普通方法的使用
        fun(msg -> {
            int i = Integer.parseInt(msg);
            return i;
        });

        //默认方法的调用
        fun2(msg -> {
            return  Integer.parseInt(msg);
        }, msg2 -> {
            return msg2*10;
        });


    }

    /**
     * R apply(T t); 普通方法的使用
     *
     * @param function
     */
    private static void fun(Function<String, Integer> function) {

        //输入一个字符串返回一个数字
        String str = "88888";
        Integer apply = function.apply(str);
        System.out.println("返回的数字为=" + apply);
    }

    /**
     * default <V> Function<T, V> andThen(Function<? super R, ? extends V> after)
     * 默认方法 andThen 默认方法：andThen，也是用来进行组合操作
     */
    private static void fun2(Function<String, Integer> function, Function<Integer, Integer> function2) {
        String var = "666666";
        //执行 function 的结果，再执行 function2
        Integer apply = function.apply(var);
        Integer apply1 = function2.apply(apply);
        System.out.println("apply="+apply+",apply1="+apply1);
        // andThen方法 等价于 以上操作的组合
        Integer apply2 = function.andThen(function2).apply(var);
        System.out.println("apply2="+apply2);

        //compose 方法的执行顺序与andThe方法执行顺序相反

        Integer apply3 = function2.compose(function).apply(var);
        System.out.println("apply3:"+apply3);
    }
}
